#pragma once
#include <iostream>
#include <string>
#include <memory>
#include <functional>
#include "log.hpp"
#include "buffer.hpp"
#include "inet_addr.hpp"
#include "reactor.hpp"
namespace net
{
    using namespace base;
    class Reactor;
    using handler_t = std::function<void()>;
    class Connection
    {
    private:
        int _fd;                 // 连接fd
        Buffer _send_buff;       // 发送缓冲区
        Buffer _recv_buff;       // 接收缓冲区
        InetAddr _peer_address;  //当前连接地址信息
        handler_t _reader_cb;    // 收到数据时调用的回调方法
        handler_t _writer_cb;    // 发送数据时调用的回调方法
        handler_t _exception_cb; // 出现异常时调用的回调方法
        // 当前连接属于的reactor
        Reactor *_owner;
    public:
        using ptr = std::shared_ptr<Connection>;
        Connection()
        {}
        ~Connection()
        {}

        //对外提供一组当事件发生时触发的回调方法！
        void set_reader_cb(const handler_t& reader_cb);
        void set_writer_cb(const handler_t& reader_cb);
        void set_exception_cb(const handler_t& reader_cb);

        //设置当前连接所属reactor
        void set_owner(Reactor* r);

        
    };
}